/**
* @author TDSoft
*
*
* La clase GestorEstudiante gestiona la clase Estudiante
*
* @see Estudiante
*/
package edu.uoc.tds.pec4.server.bbdd;

import edu.uoc.tds.pec4.common.RemotoInterface;
import edu.uoc.tds.pec4.exception.UsuarioNoTipoUsuarioException;
import edu.uoc.tds.pec4.i18n.GestorIdiomas;
import edu.uoc.tds.pec4.model.Estudiante;
import edu.uoc.tds.pec4.model.Usuario;
import java.rmi.RemoteException;

public class GestorEstudiante {

    //Atributo para gestionar el servicio de acceso remoto
    RemotoInterface remoto;

    /**
     * Constructor con parámetros de la clase GestorEstudiante.
     * Crea una instancia de GestorEstudiante.
     * {pre: se recibe como parametro la instancia del servidor remoto}
     * {post: asigna el servidor remoto a la instancia de GestorEstudiante que se va utilizar en toda la clase}
     */
    public GestorEstudiante(RemotoInterface remoto) throws RemoteException{
        this.remoto = remoto;
    }
    
    /**
     * Método para comprobar si el objeto Usuario hace referencia a un Estudiante
     * {pre: usuario dado}
     * {post: retorna true, si el objeto Usuario hace referencia a un Estudiante, false en caso contrario.}
     * @param usuario objeto usuario.
     */
    public boolean isEstudiante(Usuario usuario){
        if (usuario instanceof Estudiante)  
             return true;  
	 else
             return false;  
    }
    
    /**
     * Método para obtener la referencia a un Estudiante a partir del objeto Usuario
     * {pre: usuario dado}
     * {post: retorna el objeto Estudiante, si el objeto Usuario hace referencia a un Estudiante, en caso contrario lanza un error específico.}
     * @param usuario objeto usuario.
     */
    public Estudiante getEstudiante(Usuario usuario) throws RemoteException{
        try{
            if (usuario instanceof Estudiante)  
                return (Estudiante)usuario;  
            else
                //Se lanza una excepción porque el usuario recibido por parámetro 
                //no hace referencia al tipo de usuario que se pretende obtener
                throw new UsuarioNoTipoUsuarioException(GestorIdiomas.getMessage("error.usuario.no.es.tipousuario"));  
        }catch(UsuarioNoTipoUsuarioException exc){
            throw new RemoteException(exc.getMessage());
        }
    }
}
